<html>
<head>
<title>Remake de Fruity Frank - Version 0.19</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.SpanClass0 {
	color: #808080;
}
.SpanClass3 {
	color: #008080;
}
.SpanClass5 {
	font-weight: bold;
	color: #0000FF;
}
.SpanClass7 {
	color: #808080;
}
.SpanClass10 {
	font-weight: bold;
	color: #000080;
}
.SpanClass11 {
}
</style>
</head>
<body bgcolor="#FFFFFF">
<h2>Remake (parcial) de Fruity Frank... 19 - A&ntilde;adiendo un disparo</h2>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>


<p>Ahora vamos a a&ntilde;adir la posibilidad de que nuestro personaje &quot;dispare&quot;. La idea b&aacute;sica es la misma que con los enemigos: el disparo ser&aacute; otro elemento que podr&aacute; estar activo o no estarlo, y que deber&aacute; irse moviendo en cada fotograma.</p>

<p>En el juego Fruity Frank original, el disparo era una &quot;pelota&quot; que sal&iacute;a en la direcci&oacute;n en la que miraba nuestro personaje, que rebotaba con las paredes y que pod&iacute;a volver a nuestras manos. En esta primera aproximaci&oacute;n vamos a hacer algo mucho m&aacute;s sencillo: el &quot;disparo&quot; siempre saldr&aacute; hacia la derecha, y avanzar&aacute; hasta que choque con un enemigo o se salga de la pantalla. Adem&aacute;s, s&oacute;lo podr&aacute; haber un disparo activo en cada momento (si pudiera haber varios, deber&iacute;amos guardarlos en alguna estructura repetitiva, como un Array).</p>

<p>Esto supone varios cambios en el fuente:</p>

<ul>
<li>Habr&aacute; que declarar ciertas variables adicionales al principio del programa, que necesitaremos para el control del disparo:</li>
</ul>

<pre><code>      // Datos del disparo
      bool disparoActivo = false;
      short xDisparo, yDisparo;
      short anchoDisparo=28, altoDisparo=24;</code></pre>   

<ul>
<li>Cuando dibujamos cosas en pantalla (funci&oacute;n dibujarPantalla), tambi&eacute;n habr&aacute; que dibujar el disparo:</li>
</ul>

<pre><code>      // Disparo
      if (disparoActivo)
        DibujarImagenOculta(disparo, xDisparo, yDisparo);</code></pre>   

<ul>
<li>Igual que ten&iacute;amos una funci&oacute;n para mover los enemigos, necesitaremos otra para mover el disparo:</li>
</ul>

<pre><code>      void moverDisparo()
      {
          // De momento el disparo se mueve solo a la derecha, 5 pixeles
          if (disparoActivo)
            xDisparo += 5;
          if (xDisparo &gt; xFinPantalla)
            disparoActivo = false;      
      }</code></pre>

<ul>
<li>Cuando comprobemos colisiones (funci&oacute;n comprobarColisiones), habr&aacute; que mirar tambi&eacute;n si la pelota choca con alg&uacute;n enemigo; si es as&iacute;, eliminaremos el enemigo y la pelota. (Entonces la pelota pasar&iacute;a a estar disponible nuevamente, algo que tampoco ocurr&iacute;a en el Fruity original, en el que la pelota tardaba un cierto tiempo en volver a ser utilizable):</li>
</ul>

<pre><code>      // Veo si el disparo mata algun enemigo
      for (i=0; i&lt;NUMENEMIGOS; i++)
        if (enemigos[i].activo)
        {
            if (Colision(enemigos[i].x, enemigos[i].y,
                  enemigos[i].ancho, enemigos[i].alto,
                  xDisparo, yDisparo,
                  anchoDisparo, altoDisparo)) 
            {
              enemigos[i].activo = false;  // Desaparece el enemigo
              disparoActivo = false;  // Y el disparo
            }
        }</code></pre>

<ul>
<li>Incluso, al cambiar de nivel, o cuando nos mate un enemigo, habr&aacute; que indicar que no hay disparo activo: quedar&iacute;a &quot;feo&quot; que dispar&aacute;semos, cambi&aacute;ramos de nivel y se viera todav&iacute;a la pelota del nivel anterior movi&eacute;ndose por ah&iacute;. Esto deber&iacute;a hacerse en &quot;prepararNivel&quot; y en &quot;perderVida&quot;.</li>
</ul>


<ul>
<li>Y, por supuesto, habr&aacute; que buscar una imagen que represente ese disparo.</li>
</ul>


<p>Como siempre, todo el fuente del proyecto est&aacute; en: <a href="http://code.google.com/p/fruityfrank"> code.google.com/p/fruityfrank</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
